package com.mkx.samples;

import com.mkx.configurations.ConfigManager;
import com.mkx.configurations.LogConfig;
import com.mkx.configurations.DatabaseConfig;
import com.mkx.configurations.SecurityConfig;

/**
 * 自动配置模式演示类
 * 用于展示如何创建、注册和应用各种自动配置
 */
public class AutoConfigDemo {
    
    /**
     * 主方法，演示自动配置模式的使用
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 获取配置管理器的单例实例
        ConfigManager configManager = ConfigManager.getInstance();
        
        // 创建各种配置实例
        LogConfig logConfig = new LogConfig();
        DatabaseConfig dbConfig = new DatabaseConfig();
        SecurityConfig securityConfig = new SecurityConfig();
        
        // 注册配置到配置管理器
        configManager.register(logConfig);
        configManager.register(dbConfig);
        configManager.register(securityConfig);
        
        // 应用所有应该应用的配置
        // 配置会按照优先级顺序应用
        System.out.println("\n====== 演示1: 应用所有配置 ======");
        configManager.applyConfigurations();
        
        // 演示禁用某个配置
        System.out.println("\n====== 演示2: 禁用数据库配置 ======");
        dbConfig.setEnabled(false);
        configManager.applyConfigurations();
        
        // 演示禁用所有配置
        System.out.println("\n====== 演示3: 禁用所有配置 ======");
        logConfig.setEnabled(false);
        securityConfig.setEnabled(false);
        configManager.applyConfigurations();
        
        // 演示启用特定配置
        System.out.println("\n====== 演示4: 仅启用日志配置 ======");
        logConfig.setEnabled(true);
        dbConfig.setEnabled(false);
        securityConfig.setEnabled(false);
        configManager.applyConfigurations();
    }
}